package co.edu.udea.lab.dao;

import java.util.List;

import co.edu.udea.lab.dto.Rol;
import co.edu.udea.lab.dto.Usuario;
import co.edu.udea.lab.util.exception.LabDAOException;

/**
 * Interfaz que define los metodos que va a proveer el DAO de Usuario
 * @author Edison Castro
 *
 */
public interface IUsuarioDAO {

	/**
	 * Entrega la lista de todos los usuarios existentes en la base de datos
	 * @return Lista de Usuarios
	 * @throws LabDAOException, si ocurre problema obteniendo las listas
	 */
	public List<Usuario> obtenerUsuarios() throws LabDAOException;
	
	/**
	 * Entrega la lista de todos los usuarios existentes en la base de datos, segun un rol
	 * @param idRol Identificacion del rol, del cual se quiere obtener la lista
	 * @return Lista de Usuarios pertenecientes a un rol
	 * @throws LabDAOException
	 */
	public List<Usuario> obtenerUsuarios(Rol rol) throws LabDAOException;
	
	/**
	 * Entrega los datos especificos de un usuario
	 * @param Codigo del usuario que se espera encontrar
	 * @return Instancia con los datos del usuario obtenido, si no existe el usuario retorna null.
	 * @throws LabDAOException
	 */
	public Usuario obtenerUsuario(Integer id) throws LabDAOException;
	
	/**
	 * Entrega los datos especificos de un usuario a traves de su nombre de usuario
	 * @param nombreUsuario nombre del usuario que se espera encontrar
	 * @return Instancia con los datos del usuario obtenido, si no existe el usuario retorna null.
	 * @throws LabDAOException
	 */
	public Usuario obtenerUsuario(String nombreUsuario) throws LabDAOException;
	
	/**
	 * Guarda un registro de usuario en la base de datos
	 * @param usuario Instancia del usuario a guardar
	 * @throws LabDAOException
	 */
	public void guardar(Usuario usuario) throws LabDAOException;
	
	/**
	 * Actualiza un registro de usuario en la base de datos, se actualiza todo menos el id
	 * @param usuario Instancia del usuario a actualizar
	 * @throws LabDAOException
	 */
	public void actualizar(Usuario usuario) throws LabDAOException;
	
	/**
	 * Elimina un registro de usuario de la base de datos
	 * @param usuario Instancia del usuario a eliminar
	 * @throws LabDAOException
	 */
	public void eliminar(Usuario usuario) throws LabDAOException;
}
